A database is a structured collection of records or data. A database is typically stored at a computer system, and may be accessed by other computer systems through the computer system. For example, a first computer system, which may be referred to as a “client,” may include a “client agent” configured to request data. The client agent may request data from a “server agent” located at a second computer system (a “server”) that maintains the data in storage in an associated database.
An example of a distributed system of computers where data may be exchanged is a service-oriented architecture (SOA) system. A SOA infrastructure allows different applications to exchange data with one another as they participate in business processes. Service-orientation aims at a loose coupling of services with operating systems, programming languages and other technologies which underlie the different applications. Another example of a distributed system of computers in which data may be exchanged is a REST (Representational Estate Transfer) system. A REST infrastructure allows data to be exchanged between computer systems according to a protocol (e.g., hypertext transfer protocol (HTTP)) without an additional message layer.
When data is exchanged in distributed systems there is an expectation by the participating nodes (e.g., computer systems) regarding the shape or structure of the exchanged data. In some cases, the data is self-describing (e.g., the data includes structure information regarding the data), and in other cases, the data is structured according to a known format or “contract” that is agreed-upon and known by the participating nodes. Distributed systems that follow well established architectural styles, such as SOA and/or REST systems, typically structure exchanged data according to known formats. As such, the nodes at the ends of a data exchange are assumed to know how to interpret various representations of exchanged data, provided that a “name” for a “type” of the data that is exchanged is known. In a SOA system, this information is frequently provided in the form of data types described in WSDL documents. In REST systems, this information is provided as the Multipurpose Internet Mail Extensions (MIME) type for a given resource representation. This ability to interpret data according to known data types is particularly important in business applications that tend to focus on structured records carrying well-known data, and that need to preserve full fidelity as the data travels through the system.
However, the requirement for the use of known data types introduces increased coupling between nodes in a data exchange system. For example, the requirement for known data types does not allow the nodes exchanging data to dynamically modify the format of the data once the system has been deployed. Furthermore, this requirement causes difficulties with different versioning speeds in clients and servers, and does not allow nodes of a system to be developed when data types to be exchanged by the system are not known and/or may possibly never be known.